package com.ease.concurrent.threadpool;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 注意：核心线程使用完结时，优先使用队列。
 *
 * (1)当提交第1至第5个任务时，立即执行。
 * (2)当提交第6个任务时会放入暂存队列中。
 * (3)当提交第11个任务时，会创建第6个线程开始执行。
 * (4)当提交第16个任务时执行拒绝策略，抛出异常。
 *
 * @author: chenhs
 * @date: Created in 6:30 2019/11/4
 **/
public class ThreadPoolNeedKnow {

    public static void main(String[] args) throws InterruptedException {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS
                , new LinkedBlockingQueue<>(5));

        for (int i = 0; i < 17; i++) {
            System.out.println("放入第" + i + "个任务");

            pool.execute(()->{
                System.out.println(Thread.currentThread().getName()+" 执行任务");

                try {
                    TimeUnit.MINUTES.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });

            TimeUnit.SECONDS.sleep(1);
        }

    }

}
